package com.spsa.utilidades;

import java.io.File;
import java.util.Date;

import com.spsa.negocio.utilidades.EstadoArchivo;
import com.spsa.persistencia.entidades.DetalleInterfaz;
import com.spsa.persistencia.entidades.EstadoInterfaz;
import com.spsa.persistencia.entidades.Interfaz;

public class FactoryEstadoInterfaz2 {

	private Interfaz interfaz;
	private Date fecha;
	private int cantidadArchivos;
	private int maximoCorrelativo;
	private EstadoArchivo estadoArchivo;
	
	public FactoryEstadoInterfaz2(Interfaz interfaz) {
		this.interfaz = interfaz;
		this.cantidadArchivos = 0;
		this.maximoCorrelativo = 0;
		this.fecha = UtilFechas.obtenerHoy();
	}

	public EstadoInterfaz obtenerEstadoInterfaz() {
		DetalleInterfaz detalleInterfaz = interfaz.getDetalle();

		String rutaCarpeta = detalleInterfaz.getRutaCarpeta();
		String patronNombre = detalleInterfaz.getPatronNombre();

		patronNombre = UtilBuscadorArchivos.reemplazarFechaEnNombre(patronNombre);

		File[] archivos = UtilArchivos.obtenerArchivos(rutaCarpeta);

		int correlativo;

		for (int i = 0; i < archivos.length; i++) {
			if(!archivos[i].isFile())
				continue;
			
			Date fechaUso = UtilFechas.obtenerFechaUso(archivos[i], interfaz.getHoraCreacion());
			correlativo = UtilBuscadorArchivos.obtenerCorrelativo(patronNombre, archivos[i].getName());

			if (!esCorrelativoValido(correlativo) || correlativoEsRepetido(correlativo, maximoCorrelativo) || fechaUso == null)
				continue;
			else {
				fecha = fechaUso;
				cantidadArchivos++;
				maximoCorrelativo = actualizarCorrelativo(correlativo, maximoCorrelativo);
			}
		}

		return crearEstadoInterfaz();
	}
	
	private static boolean esCorrelativoValido(int correlativo) {
		return correlativo != 0;
	}
	
	private static boolean correlativoEsRepetido(int correlativo, int maximoCorrelativo) {
		return correlativo <= maximoCorrelativo;
	}
	
	private int actualizarCorrelativo(int correlativo, int maximoCorrelativo) {
		if (correlativo > maximoCorrelativo)
			maximoCorrelativo = correlativo;
		return maximoCorrelativo;
	}
	
	private EstadoInterfaz crearEstadoInterfaz() {
		EstadoInterfaz estadoInterfaz = new EstadoInterfaz();
		estadoInterfaz.setCodigoTienda(Parametros.get("Datos.CODIGO_TIENDA"));
		estadoInterfaz.setDescripcionInterfaz(interfaz.getDescripcion());
		estadoInterfaz.setFecha(fecha);
		estadoInterfaz.setCantidadArchivos(cantidadArchivos);

		if (cantidadArchivos != maximoCorrelativo || maximoCorrelativo == 0)
			estadoInterfaz.setCondicion(1);
		else
			estadoInterfaz.setCondicion(2);

		return estadoInterfaz;
	}
	
}
